<template>
    <view class="viewport">
        <!-- 推荐封面 -->
        <view class="cover">
            <!-- 5.1 渲染图片 -->
            <image :src="bannerPicture" />
        </view>
        <!-- tab栏 -->
        <view class="tabs">
            <!-- 5.2 列表渲染 -->
            <text v-for="item in subTypes" :key="item.id" class="text" :class="{ active: activeId === item.id }"
                @click="onActiveId(item.id)">
                {{ item.title }}
            </text>
        </view>
        <!-- 列表渲染 -->
        <scroll-view scroll-y class="scroll-view" v-for="(item, id) in goodsItems" :key="id" v-show="id === activeId" @scrolltolower="loadMore">
            <view class="goods">
                <navigator hover-class="none" class="navigator"  v-for="goods in item.items" :key="goods.id"
                    :url="`/pages/goods/index?id=${goods.id}`">
                    <image class="thumb" :src="goods.picture"></image>
                    <view class="name ellipsis">{{ goods.name }}</view>
                    <view class="price">
                        <text class="symbol">¥</text>
                        <text class="number">{{ goods.price }}</text>
                    </view>
                </navigator>
            </view>
            
            <view  class="loading">正在加载...</view>
        </scroll-view>
    </view>
</template>
<script setup>
import { ref } from 'vue';
import { getRecomendsAPI } from '@/api/home'
import { computed } from 'vue';
import { onLoad } from '@dcloudio/uni-app';

//#region 设置页面标题、点击高亮及渲染内容列表

// 1. 声明对象`urlMap`，保存title与url等信息
const urlMap = ref({
    1: { title: "特惠推荐", url: "/home/preference/mutli" },
    2: { title: "爆款推荐", url: "/home/inVogue/mutli" },
    3: { title: "一站买全", url: "/home/oneStop/mutli" },
    4: { title: "新鲜好物", url: "/home/new/mutli" }, // 后端未提供，暂用新鲜好物url
    5: { title: "新鲜好物", url: "/home/new/mutli" },
})
// const type = ref()
const currentItem = ref()
// 3. 声明数据
const bannerPicture = ref() //背景图
const goodsItems = ref([]) //商品列表集合
const subTypes = ref([])   //tab标题
const activeId = ref()  //当前选中的tab的id
onLoad( async({type})=>{
    
    // 根据type的值，从urlMap中取出信息
    currentItem.value = urlMap.value[type]
    // 动态设置页面title
    uni.setNavigationBarTitle({ title: currentItem.value.title });

    const { result } = await getRecomendsAPI(currentItem.value.url);
    
    // 保存数据
    bannerPicture.value = result.bannerPicture;
    goodsItems.value = result.goodsItems;
    subTypes.value = result.subTypes;

    // 加载后设置第一项id为activeId
    activeId.value = subTypes.value[0].id;
})
//点击高亮
const onActiveId = (id) => {
    activeId.value = id
}
// #endregion

//#region  内容列表-无限滚动
// 当前显示列表数据
const pageInfo = computed(()=>{
    if (!activeId.value) return {};
    return  goodsItems.value[activeId.value];
})

//滚动条触底事件
const loadMore=async()=>{
    //  如果当前页码>=总页码，阻止发请求
    if (pageInfo.value.page>=pageInfo.value.pages) {
        uni.showToast({title:"没有更多数据啦",icon:"none"})
        return
    }
    const { result } = await getRecomendsAPI(
    currentItem.value.url,
    activeId.value,
    // 请求下一页更多数据
    pageInfo.value.page + 1
  );
 //请求成功,手动的把自己存起来的 数据 页码+1.下次 请求分页的时候 页面才会递增
  goodsItems.value[activeId.value].page++
//  改造保存数据为合并数据;
  goodsItems.value[activeId.value].items.push(... result.goodsItems[activeId.value].items)
}

//#endregion




</script>
  
<style lang="scss">
page {
    height: 100%;
    background-color: #f4f4f4;
}

.viewport {
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 180rpx 0 0;
    position: relative;
}

.cover {
    width: 750rpx;
    height: 225rpx;
    border-radius: 0 0 40rpx 40rpx;
    overflow: hidden;
    position: absolute;
    left: 0;
    top: 0;
}

.tabs {
    display: flex;
    justify-content: space-evenly;
    height: 100rpx;
    line-height: 90rpx;
    margin: 0 20rpx;
    font-size: 28rpx;
    border-radius: 10rpx;
    box-shadow: 0 4rpx 5rpx rgba(200, 200, 200, 0.3);
    color: #333;
    background-color: #fff;
    position: relative;
    z-index: 9;

    .text {
        margin: 0 20rpx;
        position: relative;
    }

    .active {
        &::after {
            content: "";
            width: 40rpx;
            height: 4rpx;
            transform: translate(-50%);
            background-color: #27ba9b;
            position: absolute;
            left: 50%;
            bottom: 24rpx;
        }
    }
}

.scroll-view {
    flex: 1;
    overflow: hidden;
}

.goods {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    padding: 0 20rpx 20rpx;

    .navigator {
        width: 345rpx;
        padding: 20rpx;
        margin-top: 20rpx;
        border-radius: 10rpx;
        background-color: #fff;
    }

    .thumb {
        width: 305rpx;
        height: 305rpx;
    }

    .name {
        height: 88rpx;
        font-size: 26rpx;
    }

    .price {
        line-height: 1;
        color: #cf4444;
        font-size: 30rpx;
    }
}

.goods .symbol,
.goods .decimal {
    font-size: 70%;
}
</style>